/**
 * Classe que define a regra de Negocio para uma 
 * Atividade e suas validacoes
 * 
 * @author Esdras
 */
package Negocio;

import java.util.ArrayList;
import erro.ConexaoException;
import erro.NegocioException;
import erro.RepositorioException;
import ClassesBasicas.Atividade;
import Repositorio.RepAtividade;

public class NegocioAtividade {

	private RepAtividade rep;
	
	public NegocioAtividade(){
		rep = new RepAtividade();
	}
	/**
	 * Testa se a atividade ja existe, caso sim retorna a true
	 * caso conrio false 
	 * @param at
	 * @throws NegocioException
	 */
	public boolean existeAtividade(Atividade at) throws NegocioException {
		Atividade tmp = new Atividade();
		
			tmp = consultar(at.getnome_Atividade());
			
			if(tmp != null)
				return true;
			else
				return false;
	}
	/**
	 * Validacao dos campos da atividade antes de salvar	
	 * @param at
	 * @throws NegocioException
	 */
	public void salvar(Atividade at) throws NegocioException{
		
		 if(!ValidacoesGerais.isNomeValid(at.getnome_Atividade())){
			 throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
		 }
		
		if(at.getnome_Atividade().equals("") || at.getnome_Atividade().equals(null)){
			throw new NegocioException("Nome inv�lido");
		}
		
		if(at.getcod_Atividade()<0){
			throw new NegocioException("codigo invalido");
		}
		
		try {
			rep.salvar(at);
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		} 
		catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao Salvar uma Atividade "+e.getMessage());
		}
		
	}
	/**
	 * Valida e exclui pelo codigo 
	 * 
	 * @param cod
	 * @throws NegocioException
	 */
	public void excluir(int cod) throws NegocioException{
		
		if(cod <= 0){
			throw new NegocioException("Codigo Invalido");
		}
		
		try {
						
			rep.excluir(cod);
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conexao com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao Excluir uma Atividade "+e.getMessage());
		}
	}
	/**
	 * Valida e exclui uma atividade polo nome
	 * @param nome
	 * @throws NegocioException
	 */
	public void excluir(String nome) throws NegocioException{
		
		
		if(!ValidacoesGerais.isNomeValid(nome)){
			throw new NegocioException("Este campo nao pode conter caracteres numericos nem especiais");
		}
		
		if(nome.equals(null) || nome.equals("")){
			throw new NegocioException("Nome inv�lido");
		}
		
		try {
			rep.excluir(nome);
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conx�o com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao excluir uma Atividade "+e.getMessage());
		}
	}
	/**
	 * valida e consulta uma ativiade pelo codigo
	 * @param cod
	 * @return
	 * @throws NegocioException
	 */
	public Atividade consultar(int cod) throws NegocioException{
		 Atividade at = null;
		 
		 if(cod <= 0){
			 throw new NegocioException("Codigo Inv�lido");
		 }
		 
		 try {
			at = rep.consultar(cod);
			
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao consultar uma Atividade "+e.getMessage());
		}
		
		 return at;
		
	}
	/**
	 * validada e consulta uma atividade pelo nome
	 * @param nome
	 * @return
	 * @throws NegocioException
	 */
	public Atividade consultar(String  nome) throws NegocioException{
		 Atividade at = null;
		 
		 if(!ValidacoesGerais.isNomeValid(nome)){
			 throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
		 }
		 
		 if(nome.equals(null) ||nome.equals("")){
			 throw new NegocioException("nome Inv�lida");
		 }
		 
		 try {
			at = rep.consultar(nome);
			
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao consultar uma Atividade "+e.getMessage());
		}
		 
			
		 return at;
		
	}
	/**
	 * Lista todas as Atividades n�o haja retorna uma lista vasia
	 * 
	 * @return ArrayList<Atividade>
	 * @throws NegocioException
	 */
	public ArrayList<Atividade> listarAtividade() throws NegocioException{
		
		ArrayList<Atividade> list = null;
		
		try {
			list = (ArrayList<Atividade>) rep.listar();
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro listar atividades " +e.getMessage());
		}
		
		return list;
	}
}
